/**
 * @define:hjc -> 辅助库 -> 字符相关
 * */

namespace utils {
    // /**
    //  * 判断字符串以指定开头
    //  * @param:str {string} 目标字符串
    //  * @param:start {string} 指定开头
    //  * @return:{boolean}
    //  */
    // export function startsWith(str: string, start: string): boolean {
    //     return str.substr(0, start.length) === start;
    // }

	/**
	 * 判断字符串是否为合法密码(=数字+大小写字母+下划线)
	 * @param:pswd {string} 目标字符串
	 * @param:*min {number} 至少需要的位数(默认6)
	 * @param:*type {number} 至少需要的组合种数:数值、大写、小写、下划线各算一种(默认1种)
	 * @return:{string} 非法原因(null代表正确)
	 */
    export function validPswd(pswd: string, min: number = 6, type: number = 1): string {
        if (typeof pswd != 'string') return '非字符串';
        if (pswd.length < min) return `至少需要${min}位字符`;
        let typeArr = Array.fill(false, 4);
        for (let i = 0; i < pswd.length; i++) {
            let code = pswd.charCodeAt(i);
            if (code === 95) typeArr[0] = true;
            else if (code >= 48 && code <= 57) typeArr[1] = true;
            else if (code >= 56 && code <= 90) typeArr[2] = true;
            else if (code >= 97 && code <= 122) typeArr[3] = true;
            else return `非法字符${code}(必须为数值、大写、小写、下划线)`;
        }
        let typeNum = 0;
        typeArr.forEach(type => { if (type) typeNum++ });
        if (typeNum < type) return `至少包含数值、大写、小写、下划线中的${typeNum}种组合`;
        else return null;
    }

    const FAMILY_NAME = ['赵', '钱', '孙', '李', '周', '吴', '郑', '王', '冯', '陈', '褚', '卫', '蒋', '沈', '韩', '杨', '朱', '秦', '尤', '许', '何',
        '吕', '施', '张', '孔', '曹', '严', '华', '金', '魏', '陶', '姜', '戚', '谢', '邹', '喻', '柏', '水', '窦', '章', '云', '苏', '潘', '葛', '奚',
        '范', '彭', '郎', '鲁', '韦', '昌', '马', '苗', '凤', '花', '方', '俞', '任', '袁', '柳', '酆', '鲍', '史', '唐', '费', '廉', '岑', '薛', '雷',
        '贺', '倪', '汤', '滕', '殷', '罗', '毕', '郝', '邬', '安', '常', '乐', '于', '时', '傅', '皮', '卞', '齐', '康', '伍', '余', '元', '卜', '顾',
        '孟', '平', '黄', '和', '穆', '萧', '尹', '欧阳', '皇甫', '上官', '闾丘', '令狐', '东方', '夏侯', '诸葛', '尉迟', '皇甫', '宇文', '鲜于', '西门',
        '司马', '独孤', '公孙', '慕容', '轩辕', '左丘'
    ];
    const GIVEN_NAME = [
        '子璇', '淼', '国栋', '夫子', '瑞堂', '甜', '敏', '尚', '国贤', '贺祥', '晨涛', '昊轩', '易轩', '益辰', '益帆', '益冉', '瑾春', '瑾昆', '春齐', '杨', '文昊',
        '东东', '雄霖', '浩晨', '熙涵', '溶溶', '冰枫', '欣欣', '宜豪', '欣慧', '建政', '美欣', '淑慧', '文轩', '文杰', '欣源', '忠林', '榕润', '欣汝', '慧嘉', '新建',
        '建林', '亦菲', '林', '冰洁', '佳欣', '涵涵', '禹辰', '淳美', '泽惠', '伟洋', '涵越', '润丽', '翔', '淑华', '晶莹', '凌晶', '苒溪', '雨涵', '嘉怡', '佳毅',
        '子辰', '佳琪', '紫轩', '瑞辰', '昕蕊', '萌', '明远', '欣宜', '泽远', '欣怡', '佳怡', '佳惠', '晨茜', '晨璐', '运昊', '汝鑫', '淑君', '晶滢', '润莎', '榕汕',
        '佳钰', '佳玉', '晓庆', '一鸣', '语晨', '添池', '添昊', '雨泽', '雅晗', '雅涵', '清妍', '诗悦', '嘉乐', '晨涵', '天赫', '玥傲', '佳昊', '天昊', '萌萌', '若萌'];
	/**
	 * 生成随机名字
	 * @return:{string} 名字
	 */
    export function randomName(): string {
        return FAMILY_NAME.random() + GIVEN_NAME.random();
    }
}